package com.me.builder.improve;

/**
 * 指挥者，这里去指定制作流程，返回产品
 */
public class HouseDirector {

    HouseBuilder houseBuilder = null;

    /**
     * 构造器传入 houseBuilder
     *
     * @param houseBuilder 抽象构造者
     */
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    /**
     * 通过setter 传入 houseBuilder
     *
     * @param houseBuilder 抽象构造者
     */
    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    /**
     * 如何处理建造房子的流程，交给指挥者
     *
     * @return 生成房子
     */
    public House constructHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        return houseBuilder.buildHouse();
    }

}
